package main

import (
	"bufio"
	"fmt"
	"io"
	"os"
)

// 自己编写一个函数，接受两个文件路径 srcFileName dstFileName
func CopyFile(srcFileName, dstFileName string) (written int64, err error) {
	//打开srcFile
	srcFile, err := os.Open(srcFileName)

	//判断打开是否异常
	if err != nil {
		fmt.Printf("open file err=%v\n", err)
		return
	}

	//打开之后记得及时关闭
	defer srcFile.Close()

	//通过srcfile，获取到Reader
	reader := bufio.NewReader(srcFile)

	//打开dstFile
	dstFile, err := os.OpenFile(dstFileName, os.O_WRONLY|os.O_CREATE, 0666)

	//判断打开是否异常
	if err != nil {
		fmt.Printf("open file err=%v\n", err)
		return
	}

	//打开之后记得及时关闭
	defer dstFile.Close()

	//通过dstfile，获取到Writer
	writer := bufio.NewWriter(dstFile)

	//最后调用系统中的Copy方法完成复制
	return io.Copy(writer, reader)
}

func main() {
	//将 d:/cat.png 文件拷贝到 e:/abc.jpg
	//调用函数 实现操作
	srcfile := "d:/cat.png"
	dstfile := "e:/abc.png"
	_, err := CopyFile(srcfile, dstfile)
	if err != nil {
		fmt.Printf("copy fail err=%v\n", err)
		return
	}
	fmt.Println("copy success")
}
